package com.ysx.oa.user.utils;

import com.ysx.oa.role.bean.UserRoleBean;
import com.ysx.oa.student.bean.StudentBean;
import com.ysx.oa.student.dao.StudentDao;
import com.ysx.oa.user.bean.UserBean;
import com.ysx.oa.user.dao.UserDao;
import com.ysx.oa.user.dto.UserDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils;

import javax.annotation.PostConstruct;
import java.text.DecimalFormat;
import java.util.List;

@Component
public class UserUtils {

    @Autowired
    private UserDao userDao;

    @Autowired
    private StudentDao studentDao;


    public static UserUtils userUtils;

    @PostConstruct
    public void init() {
        userUtils = this;
        userUtils.userDao = this.userDao;
        userUtils.studentDao = this.studentDao;
    }



    /**
     * 方法描述:密码MD5加密
     * @author: 周海燕
     * @date: 2021/11/25 9:42 [userBean] java.lang.String
     */
    public static String md5(UserBean userBean) {
        String md5Password = DigestUtils.md5DigestAsHex(userBean.getPassword().getBytes());
        return md5Password;
    }

    /**
     * 方法描述:获取工号
     * @author: 周海燕
     * @date: 2021/11/25 9:42 [userBean] java.lang.String
     */
    public static String getJobNum(UserDto userDto) {
        // 新建一个叫user的UserBean，用于存储拿到目前表中最大的id
        UserBean user = new UserBean();

        // 获取roleId
        UserRoleBean userRoleBean = new UserRoleBean();
        Integer userId = userDto.getId();
        userRoleBean.setUserId(userId);

        UserBean role = userUtils.userDao.findRoleIdByUserId(userId);
        Integer roleId = role.getRoleId();

        // 显示前缀0000
        DecimalFormat sn = new DecimalFormat("0000");
        // 显示前缀00000
        DecimalFormat tn = new DecimalFormat("00000");

        String jobNum = null;
        if (roleId == 20020) {
            // 调用studentDao查找所有学生的接口
            List<StudentBean> studentBeans = userUtils.studentDao.selectAll();
            // 得到一共有多少个学生
            int size = studentBeans.size();
            // 拿到数组中下标最大的学生的id
            Integer studentId = studentBeans.get(size - 2).getId();
            // 将拿到的学生id放入新建的叫user的UserBean中
            user.setId(studentId);
            // 调用用户模块根据id查找用户的接口，找到刚拿到的id对应的用户对象
            UserBean userBean1 = userUtils.userDao.selectByPrimaryKey(user);
            // 拿到userBean1中的工号
            String maxJobNum = userBean1.getJobNum();
            // 将工号的英文和中文分割，并存放至数据中
            String[] jobNumSplit = maxJobNum.split("\\-");
            // 拿到数据下标为1的字符串，就是我们想要的数字，将其强转为Integer类型

            Integer num = Integer.parseInt(jobNumSplit[1]);

            // 拼接新的工号为就的数值+1
            // Integer newNum=num+1;
            String studentNum = sn.format(num + 1);
            jobNum = "YSX-" + studentNum;
        } else {
            // 调用userDao查找用户表中以jobNum以DG开头的员工的接口
            List<UserBean> jobNumByUserBean = userUtils.userDao.findJobNumByUserBean();
            // 得到一共有多少个学生
            int size = jobNumByUserBean.size();
            // 拿到数组中下标最大的学生的id
            Integer id = jobNumByUserBean.get(size - 2).getId();
            // 将拿到的学生id放入新建的叫user的UserBean中
            user.setId(id);
            // 调用用户模块根据id查找用户的接口，找到刚拿到的id对应的用户对象
            UserBean userBean1 = userUtils.userDao.selectByPrimaryKey(user);
            // 拿到userBean1中的工号
            String maxJobNum = userBean1.getJobNum();
            // 将工号的英文和中文分割，并存放至数据中
            String[] jobNumSplit = maxJobNum.split("G");
            // 拿到数据下标为1的字符串，就是我们想要的数字，将其强转为Integer类型
            Integer num = Integer.parseInt(jobNumSplit[1]);

            // 拼接新的工号为就的数值+1
            String teacherNum = tn.format(num + 1);
            jobNum = "DG" + teacherNum;
        }

        return jobNum;
    }
}
